/**
 * Created by apelsin on 5/8/14.
 */
var triple_data = {
  sel:['','',''], //выбранные значения
  arr:[[],[],[]], //массивы для заполнения, на их основе генерируется вывод dd
  dd:['','',''],  //массив dd объектов
  ind:['','',''], //индексы в строке вида xx|xx|xx|xx - порядок индексов указывает к какому dd относится
  in_arr:[], //входной массив для разбора
  need_empty_line: true,
  clear_old_value: true,
  activate_dd: function(){
    triple_data.calc_arr_0();
    triple_data.calc_arr_1();
    triple_data.calc_arr_2();
    triple_data.fill_dd(0);
    triple_data.fill_dd(1);
    triple_data.fill_dd(2);
  },
  clear_dd: function(){
    triple_data.sel=['','',''];
    triple_data.activate_dd();
  },
  changed_dd0: function(){
    if (triple_data.clear_old_value){
      triple_data.sel[1] = '';
      triple_data.sel[2] = '';
    }
    triple_data.calc_arr_1();
    triple_data.calc_arr_2();
    triple_data.fill_dd(1);
    triple_data.fill_dd(2);
  },
  changed_dd1: function(){
    if (triple_data.clear_old_value){
      triple_data.sel[2] = '';
    }
    triple_data.calc_arr_2();
    triple_data.fill_dd(2);
  },
  fill_dd: function(index){
    triple_data.dd[index].empty();
    if (triple_data.need_empty_line){
      triple_data.dd[index].append($("<option></option>").text(""));}
    $.each(triple_data.arr[index].sort(), function(key, value) {
      if (value == triple_data.sel[index]){
        triple_data.dd[index].append($("<option value='"+value+"' selected>"+value+"</option>"));
      }else{
        triple_data.dd[index].append($("<option value='"+value+"'>"+value+"</option>"));
      }
    });
  },
  calc_arr_0: function(){
    var ar=[];
    $.each(triple_data.in_arr, function(key, value) {
      var v = value.split('|')[triple_data.ind[0]]
      if ($.inArray(v, ar)==-1){
        ar.push(v);
      }
    });
    triple_data.arr[0] = ar;
  },
  calc_arr_1: function(){
    var ar=[];
    var sel_0 = triple_data.sel[0];
    $.each(triple_data.in_arr, function(key, value) {
      var cond_0 = value.split('|')[triple_data.ind[0]];
      var v = value.split('|')[triple_data.ind[1]];
      if ($.inArray(v, ar)==-1){
        if(cond_0==sel_0 || sel_0==""){
          ar.push(v);
        };
      };
    });
    triple_data.arr[1] = ar;
  },
  calc_arr_2: function(){
    var ar=[];
    var sel_0 = triple_data.sel[0];
    var sel_1 = triple_data.sel[1];
    $.each(triple_data.in_arr, function(key, value) {
      var cond_0 = value.split('|')[triple_data.ind[0]];
      var cond_1 = value.split('|')[triple_data.ind[1]];
      var v = value.split('|')[triple_data.ind[2]];
      if ($.inArray(v, ar)==-1){
        if(sel_0==""){
          if(cond_1==sel_1 || sel_1 == ""){
            ar.push(v);
          }
        }else{
          if(sel_0==cond_0 && (cond_1==sel_1 || sel_1 == "")){
            ar.push(v);
          }
        };
      };

    });
    triple_data.arr[2] = ar;
  }
};

var double_data = {
  sel:['',''], //выбранные значения
  arr:[[],[]], //массивы для заполнения, на их основе генерируется вывод dd
  dd:['',''],  //массив dd объектов
  ind:['',''], //индексы в строке вида xx|xx|xx|xx - порядок индексов указывает к какому dd относится
  in_arr:[], //входной массив для разбора
  val_arr: new Array(),
  need_empty_line: true,
  clear_old_value: true,
  activate_dd: function(){
    double_data.calc_arr_0();
    double_data.calc_arr_1();
    double_data.fill_dd(0);
    double_data.fill_dd(1);
  },
  clear_dd: function(){
    double_data.sel=['',''];
    double_data.activate_dd();
  },

  changed_dd0: function(){
    if (double_data.clear_old_value){
      double_data.sel[1] = '';
    }
    double_data.calc_arr_1();
    double_data.fill_dd(1);
  },


  fill_dd: function(index){
    double_data.dd[index].empty();
    if (double_data.need_empty_line){
      double_data.dd[index].append($("<option></option>").text(""));}
    $.each(double_data.arr[index].sort(), function(key, value) {
      var v = (index == 1) ?  double_data.val_arr[double_data.sel[0]+'|' + value] : value;
      if (value == double_data.sel[index]){
       double_data.dd[index].append($("<option selected value='"+value+"'>"+v+"</option>"));
      }else{
        double_data.dd[index].append($("<option value='"+value+"'>"+v+"</option>"));
      }
    });
  },
  calc_arr_0: function(){
    var ar=[];
    $.each(double_data.in_arr, function(key, value) {
      var v = value.split('|')[double_data.ind[0]]
      if ($.inArray(v, ar)==-1){
        ar.push(v);
      }
    });
    double_data.arr[0] = ar;
  },
  calc_arr_1: function(){
    var ar=[];
    var arv=new Array();
    var sel_0 = double_data.sel[0];
    $.each(double_data.in_arr, function(key, value) {
      var spl_arr = value.split('|');
      var cond_0 = spl_arr[double_data.ind[0]];
      var v = value.split('|')[double_data.ind[1]];
      if ($.inArray(v, ar)==-1){
        if(cond_0==sel_0 || sel_0==""){
          ar.push(v);
          arv[cond_0 +'|'+ v] = v + ' - ' + spl_arr[2] + ' ' + spl_arr[3].toUpperCase()  + ' ' + spl_arr[4];
        };
      };
    });
    double_data.arr[1] = ar;
    double_data.val_arr = arv;
  }
}

var double_standart_data = {
  sel:['',''], //выбранные значения
  arr:[[],[]], //массивы для заполнения, на их основе генерируется вывод dd
  dd:['',''],  //массив dd объектов
  ind:['',''], //индексы в строке вида xx|xx|xx|xx - порядок индексов указывает к какому dd относится
  in_arr:[], //входной массив для разбора
  need_empty_line: true,
  clear_old_value: true,
  activate_dd: function(){
    double_standart_data.calc_arr_0();
    double_standart_data.calc_arr_1();
    double_standart_data.fill_dd(0);
    double_standart_data.fill_dd(1);
  },
  clear_dd: function(){
    double_standart_data.sel=['',''];
    double_standart_data.activate_dd();
  },

  changed_dd0: function(){
    if (double_standart_data.clear_old_value){
      double_standart_data.sel[1] = '';
    }
    double_standart_data.calc_arr_1();
    double_standart_data.fill_dd(1);
  },


  fill_dd: function(index){
    double_standart_data.dd[index].empty();
    if (double_standart_data.need_empty_line){
      double_standart_data.dd[index].append($("<option></option>").text(""));}
    $.each(double_standart_data.arr[index].sort(), function(key, value) {
      if (value == double_standart_data.sel[index]){
        double_standart_data.dd[index].append($("<option selected value='"+value+"'>"+value+"</option>"));
      }else{
        double_standart_data.dd[index].append($("<option value='"+value+"'>"+value+"</option>"));
      }
    });
  },
  calc_arr_0: function(){
    var ar=[];
    $.each(double_standart_data.in_arr, function(key, value) {
      var v = value.split('|')[double_standart_data.ind[0]]
      if ($.inArray(v, ar)==-1){
        ar.push(v);
      }
    });
    double_standart_data.arr[0] = ar;
  },
  calc_arr_1: function(){
    var ar=[];
    var sel_0 = double_standart_data.sel[0];
    $.each(double_standart_data.in_arr, function(key, value) {
      var cond_0 = value.split('|')[double_standart_data.ind[0]];
      var v = value.split('|')[double_standart_data.ind[1]];
      if ($.inArray(v, ar)==-1){
        if(cond_0==sel_0 || sel_0==""){
          ar.push(v);
        };
      };
    });
    double_standart_data.arr[1] = ar;
  }
}